﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace DalEntity.Implementacao
{
    //public class DalPercurso<K> : Modelo.Interface.IDalPercurso where K: Modelo.Interface.IBaseBD 
    public class DalPercurso : Modelo.Interface.IDalPercurso //where K: Modelo.Interface.IBaseBD 
    {
        ShippingEntities db;
        Modelo.Interface.IBaseBD basica;
        public DalPercurso()
        {
            db = new ShippingEntities();
            
        }
        private void DefineBase<T>(T objdeteste)
        {
            string t = objdeteste.GetType().ToString().Split('.')[1];
            basica = (Modelo.Interface.IBaseBD)(Activator.CreateInstance("DalEntity", "DalEntity." + t)).Unwrap();// , Properties.Settings.Default.Dal + "." + "DalCliente")).Unwrap();
          
        
        }

        public IList<T> ListaPercursos<T>()where T: class,new()
        {
           return( basica.RetornaGeral<T>());
          // return  List<T> _listRetorno = new List<T>();
            //foreach (Percurso cli in new Percurso().RetornaBase<Percurso>())
            //{
                
            //    _listRetorno.Add(new Modelo.Percurso((int)cli.IdCliente.Value, (int)cli.DistanciaTotal.Value,(decimal) cli.TempoEsperado.Value, cli.Nome, cli.Id));

            //}
            //return _listRetorno;
        }

        public T RetornaPercursoID<T>(int id)
        {
            throw new Exception();
           // Percurso cli = db.Percurso.FirstOrDefault(c => c.Id == id);
            //return new Modelo.Percurso((int)cli.IdCliente.Value, (int)cli.DistanciaTotal.Value,(decimal) cli.TempoEsperado.Value, cli.Nome, cli.Id);
        }

       
        public bool InserePercurso<T>(T objdeteste)
        {
            throw new Exception();
            //return ( basica.Insere<T>(objdeteste));
            //db.AddToPercurso(new Percurso().ConverteModelEntity(Percurso));
            //return (db.SaveChanges() > 0);
        }

        public bool UpdatePercurso(Modelo.Percurso percurso)
        {

            Percurso per = new Percurso().ConverteModelEntity(percurso);
            db.Percurso.Attach(per);
            db.ObjectStateManager.ChangeObjectState(per, EntityState.Modified);
            return (db.SaveChanges() > 0);


        }

        public bool ExcluiPercurso(int id)
        {
            Percurso cli = db.Percurso.SingleOrDefault(c => c.Id == id);
            db.Percurso.DeleteObject(cli);
            return (db.SaveChanges() > 0);
        }




        public bool InserePercurso(Modelo.Percurso Percurso)
        {
            throw new NotImplementedException();
        }


        public IList<Modelo.Percurso> ListaPercursos()
        {
            throw new NotImplementedException();
        }


        public Modelo.Percurso RetornaPercursoID(int id)
        {
            throw new NotImplementedException();
        }

        public List<T> RetornaBase<T>()
        {
            db = new ShippingEntities();
            //return (T?)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(s);
            List<T> teste = new List<T>((IEnumerable<T>)db.Percurso.ToList());
            return teste;

        }


    }
}
